# -*- coding: utf-8 
import json, urllib, urllib2
from EssaiAVA.ava.outils.geocode import format_coordonnees
from BeautifulSoup import BeautifulSoup
import re

RESTAU_BASE_URL = "https://maps.googleapis.com/maps/api/place/search/json?location="
RESTAU_AUTOCOMP_BASE_URL = "https://maps.googleapis.com/maps/api/place/autocomplete/json?input="
DETAILS_BASE_URL = "https://maps.googleapis.com/maps/api/place/details/json?reference="

    
def get_restaurants(lat, lng):
    # rend la liste de restaurants dans le périmètre
    G = format_coordonnees(lat, lng)
    url = RESTAU_BASE_URL + G[0] + ',' + G[1] + '&radius=100000&types=restaurant&sensor=false&key=AIzaSyCes2Wsrv2CeOENVUlaQba9kuBWba8znlY&language=fr'
    result = json.load(urllib.urlopen(url))
    return result['results']

def get_details(id):
    # rend des infos supplémentaires sur un restaurant en particulier (url)
    url = DETAILS_BASE_URL + id + '&sensor=false&key=AIzaSyCes2Wsrv2CeOENVUlaQba9kuBWba8znlY&language=fr'
    result = json.load(urllib.urlopen(url))
    rep = result['result']['url']
    return rep

def get_type(url):
    # rend le type du restaurant à partir de son url (s'il existe)
    page_web = urllib2.urlopen(url)
    soup = BeautifulSoup(page_web)
    balise = soup.find('span', id="pp-cats-closed")
    if balise!=None:
        return balise.string
    
def get_type_number(balise):
    # rend le numéro de type du restaurant à partir de la chaîne de caractères type
    asiat = re.compile(r"(Chinese|Japanese|Chinois|Japonais|Sushi|tha)", re.I)
    ital = re.compile(r"(Italian|Italien|Pizza)", re.I)
    fast = re.compile(r"(Fast|rapide)", re.I)
    orien = re.compile(r"(Oriental|Couscous)", re.I)
    if fast.search(balise)!=None:
        return 0
    elif ital.search(balise)!=None:
        return 3
    elif asiat.search(balise)!=None:
        return 1
    elif orien.search(balise)!=None:
        return 4
    else:
        return 2
    
def info_restaurant(resultat):
    #a partir d'un résultat du dico, rend une liste [lat, lng, nom, id]
    lat = resultat['geometry']['location']['lat']
    lng = resultat['geometry']['location']['lng']
    nom = resultat['name']
    id = resultat['reference']
    G = [lat, lng, nom, id]
    return G

def convert_type_to_int(str_type):
    #rend le numero de type à partir du code de l'objet Detail
    if str_type=='FF':
        return 0
    elif str_type=='AS':
        return 1
    elif str_type=='FR':
        return 2
    elif str_type=='IT':
        return 3
    elif str_type=='OR':
        return 4
    else:
        pass

# test avec l'API Google Autocomplete -> n'apporte rien de plus
def get_restaurants_autocomp(lat, lng, str):
    # rend la liste de restaurants dans le périmètre du type choisi
    G = format_coordonnees(lat, lng)
    url = RESTAU_AUTOCOMP_BASE_URL + str + '&location=' + G[0] + ',' + G[1] + '&sensor=false&key=AIzaSyCes2Wsrv2CeOENVUlaQba9kuBWba8znlY&language=fr'
    result = json.load(urllib.urlopen(url))
    return result['predictions']